/**
 * 定时器管理类
 * 用于管理图表组件的定时刷新功能
 */
export class TimerManager {
    constructor(refreshCallback, options = {}) {
        this.refreshCallback = refreshCallback; // 刷新回调函数
        this.timer = null;
        this.interval = options.interval || 30000; // 默认30秒
        this.isRunning = false;
        this.name = options.name || 'timer';
    }

    /**
     * 启动定时器
     * @param {number} interval - 刷新间隔（毫秒），可选
     */
    start(interval) {
        // 如果已经在运行，先停止
        this.stop();
        
        if (interval) {
            this.interval = interval;
        }
        
        this.isRunning = true;
        this.timer = setInterval(async () => {
            try {
                await this.refreshCallback();
            } catch (error) {
                console.error(`定时器 ${this.name} 执行回调失败:`, error);
                // 可以选择是否停止定时器
                // this.stop();
            }
        }, this.interval);
        
        console.log(`定时器 ${this.name} 已启动，间隔: ${this.interval}ms`);
    }

    /**
     * 停止定时器
     */
    stop() {
        if (this.timer) {
            clearInterval(this.timer);
            this.timer = null;
            this.isRunning = false;
            console.log(`定时器 ${this.name} 已停止`);
        }
    }

    /**
     * 重启定时器
     * @param {number} interval - 新的刷新间隔（毫秒），可选
     */
    restart(interval) {
        this.start(interval);
    }

    /**
     * 设置刷新间隔
     * @param {number} interval - 刷新间隔（毫秒）
     */
    setInterval(interval) {
        this.interval = interval;
        // 如果当前正在运行，重启以应用新间隔
        if (this.isRunning) {
            this.restart();
        }
    }

    /**
     * 获取定时器状态
     * @returns {Object} 定时器状态信息
     */
    getStatus() {
        return {
            name: this.name,
            isRunning: this.isRunning,
            interval: this.interval,
            hasTimer: this.timer !== null
        };
    }

    /**
     * 销毁定时器
     */
    destroy() {
        this.stop();
        this.refreshCallback = null;
    }
}